package com.chpro.scsw.dao;


import java.util.List;
import java.util.Map;


/**
 * Dao基类接口封装CRUD方法
 * Title: 泛型DAO
 * Description:
 * Company: 搜吃搜玩
 * @author 
 * create date: 2014-04-15
 * @version 1.0
 */
public interface BaseDao<T>{
	/**
	 * 增加
	 * @param classMethod mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param entity 封装数据的实体
	 * @return 返回操作结果
	 * @throws Exception 抛出所有异常
	 */
	public boolean add(String classMethod, T entity) throws Exception;
	
	/**
	 * 修改
	 * @param classMethod mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param entity 封装数据的实体
	 * @return 返回操作结果
	 * @throws Exception 抛出所有异常
	 */
	public boolean edit(String classMethod, T entity) throws Exception;

	/**
	 * 删除
	 * @param classMethod mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param entity 封装数据的实体
	 * @return 返回操作结果
	 * @throws Exception 抛出所有异常
	 */
	public boolean remove(String classMethod, T entity) throws Exception;
	
	/**
	 * 批量删除
	 * @param classMethod mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param list 要删除的数据集合
	 * @return 返回操作结果
	 * @throws Exception 抛出所有异常
	 */
	public boolean batchDelete(String classMethod, List<String> list) throws Exception;
	
	
	/**
	 * 批量增加
	 * @param classMethod mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param list 要增加的数据集合
	 * @return 返回操作结果
	 * @throws Exception 抛出所有异常
	 */
	public boolean batchAdd(String classMethod, List<T> list) throws Exception;

	/**
	 * 以id为条件查找对象
	 * @param classMethod mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param entity 封装数据的实体
	 * @return 返回查询结果
	 * @throws Exception 抛出所有异常
	 */
	public T get(String classMethod, T entity) throws Exception;
	
	/**
	 * 查询
	 * @param classMethod mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param entity 封装数据的实体
	 * @return 返回查询结果
	 * @throws Exception 抛出所有异常
	 */
	public List<T> getAllList(String classMethod) throws Exception;
	
	/**
	 * 查询
	 * @param classMethod mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param entity 封装数据的实体
	 * @return 返回查询结果
	 * @throws Exception 抛出所有异常
	 */
	public List<T> getAllList(String classMethod, T entity) throws Exception;
	/**
	 * 查询数量
	 * @param classMethod mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param entity 封装数据的实体
	 * @return 返回查询结果
	 * @throws Exception 抛出所有异常
	 */
	public int getCount(String classMethod, T entity) throws Exception;
	public T getCountObject(String classMethod, T entity) throws Exception;
	
	/**
	 * 获取单个值 如sum、count等
	 * @param queryClassMethod  queryClassMethod	mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param entity 查询条件实体
	 * @return
	 * @throws Exception
	 */
	public String getOneResult(String queryClassMethod, T entity) throws Exception;
	
	/**
	 * 获取map集合
	 * @param queryClassMethod  queryClassMethod	mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param obj 查询条件map
	 * @return
	 * @throws Exception
	 */
	public Map<String, Object> getMap(String queryClassMethod, Map<String, Object> obj) throws Exception;
	
	/**
	 * 查询 -单个String 查询所有 如in ids 
	 * @param classMethod mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param params 封装数据的实体
	 * @return 返回查询结果
	 * @throws Exception 抛出所有异常
	 */
	public List<T> getAllListByIds(String classMethod, List<String> params) throws Exception;
	
	/**
	 * 获取对象 
	 * @param classMethod mybatis配置文件里面对应的命名空间+要执行的sql语句id
	 * @param params String
	 * @return 返回查询结果
	 * @throws Exception 抛出所有异常
	 */
	public T get(String classMethod, String param) throws Exception;
	
}
